package models.services;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import org.apache.log4j.Logger;

import models.entities.Empleado;
import models.services.exc.EntityNotFoundException;
import models.services.utils.DBManager;

public class ServicioEmpleados implements ICatalog<Empleado> {

	private final static Logger logger = Logger
			.getLogger(ServicioEmpledos.class);

	public int guardarActualizar(Empleado entity) {

		DBManager manager = DBManager.getInstance();
		String appelidoMaterno = entity.getAppelidoMaterno();
		String appelidoPaterno = entity.getAppelidoPaterno();
		String calle = entity.getCalle();
		int idColonia = entity.getColonia();
		String noCasa = entity.getNoCasa();
		String nombre = entity.getNombre();
		String entreCalles1 = entity.getEntreCalles1();
		String cp = entity.getCP();
		String entreCalles2 = entity.getEntreCalles2();
		String correo = entity.getCorreo();
		String tel = entity.getTel();

		char sexo = entity.getSexo();

		// obtener la fecha

		String sql = "INSERT INTO empleados VALUES(null,'" + nombre + "','"
				+ appelidoPaterno + "','" + appelidoMaterno + "','" + calle
				+ "'," + noCasa + "," + idColonia + ",'" + entreCalles1 + "','"
				+ tel + "'," + cp + ",'" + correo + "','" + sexo + "','"
				+ entreCalles2 + "')";

		int res = manager.guardarActualizar(sql);
		return res;
	}

	@Override
	public Empleado obtener(int id) throws EntityNotFoundException {
		String consulta = "SELECT * FROM empleados WHERE id=" + id;
		ResultSet rs = DBManager.getInstance().consultar(consulta);
		Empleado entity = new Empleado();
		try {
			if (rs.next()) {
				do {
					int rsid = rs.getInt("id");
					String nombre = rs.getString("nombre");
					String apPaterno = rs.getString("apellidopat");
					String apMaterno = rs.getString("apellidomat");
					String sexo = rs.getString("sexo");
					String calle = rs.getString("calle");
					String numCasa = rs.getString("numeroCasa");
					String correo = rs.getString("correo");
					String telefono = rs.getString("telefono");

					entity.setId(rsid);
					entity.setNombre(nombre);
					entity.setAppelidoPaterno(apPaterno);
					entity.setAppelidoMaterno(apMaterno);
					entity.setSexo(sexo.charAt(0));
					entity.setCalle(calle);
					entity.setNoCasa(numCasa);
					entity.setCorreo(correo);
					entity.setTel(telefono);

				} while (rs.next());
			} else {
				throw new EntityNotFoundException("empleados no encontrado");
			}
		} catch (SQLException e) {
			logger.error(e.getCause(), e);
		}
		return entity;
	}

	public boolean borrar(Empleado empleados) {
		DBManager manager = DBManager.getInstance();
		return manager.borrar(empleados.getId(), "empleados");
	}

	public int update(String campo, String value, int id) {
		DBManager manager = DBManager.getInstance();
		String sql = "UPDATE empleados SET " + campo + " = '" + value
				+ "' WHERE id=" + id;
		int guardarActualizar = manager.guardarActualizar(sql);
		return guardarActualizar;
	}

	public int update(String campo, int value, int id) {
		DBManager manager = DBManager.getInstance();
		String sql = "UPDATE empleados SET " + campo + " = " + value
				+ " WHERE id=" + id;
		int guardarActualizar = manager.guardarActualizar(sql);
		return guardarActualizar;

	}

	
	public int actualizar(Empleado empleado) {

		DBManager manager = DBManager.getInstance();

		int id=empleado.getId();
		String appelidoMaterno = empleado.getAppelidoMaterno();
		String appelidoPaterno = empleado.getAppelidoPaterno();
		String calle = empleado.getCalle();
		int idColonia = empleado.getColonia();
		String noCasa = empleado.getNoCasa();
		String nombre = empleado.getNombre();
		String entreCalles1 = empleado.getEntreCalles1();
		String cp = empleado.getCP();
		String entreCalles2 = empleado.getEntreCalles2();
		String correo = empleado.getCorreo();
		String tel = empleado.getTel();

		char sexo = empleado.getSexo();
		//Date fechaStatus = empleado.getFecha_status();
		// boolean status = cliente.isStatus();
		//String comentarios = empleado.getComentarios();

		//DateFormat format = new SimpleDateFormat("yyyy-MM-dd");

		/*String fecha = null;
		if (fechaStatus != null) {
			fecha = format.format(fechaStatus);
		}
		// obtener la fecha
		Calendar c = new GregorianCalendar();

		String dia, annio;
		int mes;

		dia = Integer.toString(c.get(Calendar.DATE));
		mes = c.get(Calendar.MONTH);
		annio = Integer.toString(c.get(Calendar.YEAR));
		String fechadehoy = annio + "-" + (mes + 1) + "-" + dia;*/

		String sql = "UPDATE  empleados SET nombre "+" = " +"'"
		       + nombre + "',apellidopat"+" = "+"'"+ appelidoPaterno
		       +"',apellidomat"+"='"+appelidoMaterno+"',calle"+"='"+
		       calle+"',numeroCasa="+"'"+noCasa+"',idcolonia="+idColonia
		       +",entrecalles1='"+entreCalles1+"',tel="+tel+",cp="+cp+
		       ",correo='"+correo+"',sexo='"+sexo+"',entrecalles2='"+
		       entreCalles2+"'  WHERE id = "+id; 

		int res = manager.guardarActualizar(sql);
		return res;
	}

	@Override
	public List<Empleado> buscarPorNumero(String campo, int valor) {
		List<Empleado> empleados = new ArrayList<Empleado>();
		DBManager manager = DBManager.getInstance();
		String sql = "SELECT * FROM empleados WHERE " + campo + " = " + valor;
		ResultSet rs = manager.consultar(sql);
		return this.buscar(rs, empleados);
	}

	@Override
	public List<Empleado> buscarPorString(String campo, String valor) {
		List<Empleado> empleadoss = new ArrayList<Empleado>();
		DBManager manager = DBManager.getInstance();
		String sql = "SELECT * FROM empleados WHERE " + campo + " LIKE '%"
				+ valor + "%'";
		ResultSet rs = manager.consultar(sql);
		return this.buscar(rs, empleadoss);
	}

	private List<Empleado> buscar(ResultSet rs, List<Empleado> lista) {
		try {
			while (rs.next()) {
				Empleado entity = new Empleado();
				int rsid = rs.getInt("id");
				String nombre = rs.getString("nombre");
				String apPaterno = rs.getString("apellidopat");
				String apMaterno = rs.getString("apellidomat");
				String sexo = rs.getString("sexo");
				String calle = rs.getString("calle");
				String numCasa = rs.getString("numeroCasa");
				String correo = rs.getString("correo");
				String telefono = rs.getString("tel");

				entity.setId(rsid);
				entity.setNombre(nombre);
				entity.setAppelidoPaterno(apPaterno);
				entity.setAppelidoMaterno(apMaterno);
				entity.setSexo(sexo.charAt(0));
				entity.setCalle(calle);
				entity.setNoCasa(numCasa);
				entity.setCorreo(correo);
				entity.setTel(telefono);

				lista.add(entity);
			}
		} catch (Exception e) {
			logger.error(e.getCause(), e);
		}
		return lista;
	}

}
